'''
字典：
    1.字典是一种可变的容器类型，它是一个无序的键值对集合。
    2.字典的语法：{键1:值1,键2:值2,键3:值3,...}
        键值对：键和值之间用冒号分隔，键和值之间用逗号分隔。
    3.字典的键必须是不可变的类型，如数字、字符串、元组等。
    4.字典的值可以是任意类型，包括数字、字符串、列表、元组、字典、集合、函数、类、对象等。
    5.字典的键是唯一的，不能重复。
    6.字典的键是无序的，不能通过下标来操作。
    7.字典的键是不可变的，不能修改。 
    字典常用方法：
    dict[key] = value：将键值对添加到字典中，如果键存在，则修改对应的值。
    setdefault(key, default)：如果键不存在，则添加键值对，如果键存在，则返回对应的值。
    dict.get(key)：获取字典中键为key的值，如果键不存在，则返回None。
    dict.update(dict2)：将字典dict2中的键值对添加到字典dict中，如果键存在，则修改对应的值。
    del dict[key]：删除字典中键为key的值。
    dict.pop(key)：删除字典中键为key的值，并返回对应的值。
    dict.keys()：返回字典中所有的键。
    dict.values()：返回字典中所有的值。
    dict.items()：返回字典中所有的键值对。
    dict.clear()：清空字典中的所有键值对。
    dict.copy()：返回字典的浅拷贝。
'''
#1.定义字典
dict1={"name":"张三","age":18,"gender":"男"} # 定义一个字典，里面包含了学生的姓名、年龄、性别
print(dict1,type(dict1)) # 输出字典，类型是dict

#2.修改值
# 通过[键]修改值或添加新的键值对
dict1["name"]="李四" # 修改键为"name"的值，值是"李四"
dict1["age"]=19 # 修改键为"age"的值，值是19
dict1["gender"]="女" # 修改键为"gender"的值，值是"女"
print(dict1) # 输出字典，类型是dict
dict1["height"]=1.75 # 添加键为"height"的值，值是1.75

#通过update()方法
dict1.update({"age":20}) # 修改键为"age"的值，值是20
print(dict1) # 输出字典，类型是dict

#3.取值,配合[键]
#3.1通过[键]取值
print(dict1["name"]) # 输出键为"name"的值，值是"张三"
print(dict1["age"]) # 输出键为"age"的值，值是18
print(dict1["gender"]) # 输出键为"gender"的值，值是"男"
#print(dict1["height"]) # 报错，键为"height"不存在，字典中没有这个键，所以会报错。
#3.2通过get()方法取值
score=dict1.get("score") # 使用get()方法获取键为"score"的值，值是None，因为字典中没有这个键。
print(score,type(score)) # 输出键为"score"的值，值是None，类型是NoneType
age=dict1.get("age") # 使用get()方法获取键为"age"的值，值是18，因为字典中有这个键。
print(age,type(age)) # 输出键为"age"的值，值是18，类型是int

#4.通过setdefault()方法那么添加新的键值对
#4.1如果键不存在，就添加这个键和值。如果键存在，就添加不了这个键和值了。
dict1.setdefault("score",100) # 修改键为"score"的值，值是100，注意：如果键不存在，就添加这个键和值。
print(dict1) # 输出字典，类型是dict

#5.删除键值对
#5.1通过del删除
del dict1["score"] # 删除键为"score"的值，值是100，注意：如果键不存在，就会报错。
print(dict1) # 输出字典，类型是dict
#5.2通过pop()方法删除
dict1.pop("age") # 删除键为"age"的值，值是18，注意：如果键不存在，就会报错。
print(dict1) # 输出字典，类型是dict

#6.遍历
#6.1 遍历所有的键值对，遍历得到所有key再根据key去取值
for key in dict1: # 遍历字典，key是字典中的每一个键，key的类型是str
    print(key,dict1[key]) # 输出key的值，key的类型是str，dict1[key]是字典中键为key的值，key的类型是str，dict1[key]的类型是str去
for i in dict1: # 遍历字典，i是字典中的每一个键，i的类型是str
    print(i,dict1[i]) # 输出i的值，i的类型是str，dict1[i]是字典中键为i的值，i的类型是str，dict1[i]的类型是str
print("="*50) # 输出分隔符，分隔符是50个等号
#6.2 遍历字典，只遍历所有的key
for key in dict1.keys(): # 遍历字典，key是字典中的每一个键，key的类型是str
    print(key) # 输出key的值，key的类型是str
print("="*50) # 输出分隔符，分隔符是50个等号
#6.3 遍历字典，只遍历所有的值
for value in dict1.values(): # 遍历字典，value是字典中的每一个值，value的类型是str
    print(value) # 输出value的值，value的类型是str
print("="*50) # 输出分隔符，分隔符是50个等号
#6.4遍历字典得到每一个key和每一个value
for key,value in dict1.items(): # 遍历字典，key是字典中的每一个键，key的类型是str，value是字典中的每一个值，value的类型是str
    print(key,value) # 输出key的值，key的类型是str，value的值是字典中键为key的值，value的类型是str，dict1[key]的类型是str去

